import { constantRoutes } from '@/router'
import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'

const permission = {
  state: {
    routes: [],
    addRoutes: []
  },
  mutations: {
    SET_ROUTES: (state, routes) => {
      state.addRoutes = routes
      state.routes = constantRoutes.concat(routes)
    }
  },
  actions: {
    // 生成路由
    GenerateRoutes({ commit }) {
      return new Promise(resolve => {
        // 向后端请求路由数据
        getRouters().then(res => {
          // 向后端请求路由数据
          getRouters().then(res => {
            /*res.data.push({
              "name": "Log",
              "path": "/log",
              "hidden": false,
              "redirect": "noRedirect",
              "component": "Layout",
              "alwaysShow": true,
              "children": [
                {
                  "name": "Retrieval",
                  "path": "retrieval",
                  "hidden": false,
                  "component": "log/retrieval/index",
                  "meta": {
                    "title": "检索频率",
                    "icon": "build"
                  }
                },
                {
                  "name": "Resources",
                  "path": "resources",
                  "hidden": false,
                  "component": "log/resources/index",
                  "meta": {
                    "title": "资源分布",
                    "icon": "build"
                  }
                }, {
                  "name": "Adminlog",
                  "path": "adminlog",
                  "hidden": false,
                  "component": "log/adminlog/index",
                  "meta": {
                    "title": "用户日志",
                    "icon": "build"
                  }
                }, {
                  "name": "Accesslogs",
                  "path": "accesslogs",
                  "hidden": false,
                  "component": "log/accesslogs/index",
                  "meta": {
                    "title": "访问记录",
                    "icon": "build"
                  }
                  //
                }
              ],
              "meta": {
                "title": "日志管理",
                "icon": "tool"
              }
            });*/
            const accessedRoutes = filterAsyncRouter(res.data)
            accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
            commit('SET_ROUTES', accessedRoutes)
            resolve(accessedRoutes)
          })
        })
      })
    }
  }

}

// 遍历后台传来的路由字符串，转换为组件对象
function filterAsyncRouter(asyncRouterMap) {
  return asyncRouterMap.filter(route => {
    if (route.component) {
      // Layout组件特殊处理
      if (route.component === 'Layout') {
        route.component = Layout
      } else {
        route.component = loadView(route.component)
      }
    }
    if (route.children != null && route.children && route.children.length) {
      route.children = filterAsyncRouter(route.children)
    }
    return true
  })
}

export const loadView = (view) => { // 路由懒加载
  return (resolve) => require([`@/views/${view}`], resolve)
}

export default permission
